package command;

import beans.FluxBean;
import beans.ListeFlux;
import beans.ListeSuivis;
import beans.SuiviBean;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.*;

/**
 * @author Antonin Mozzati
 * @author Yannick Schürter
 */
public class AfficherFluxPublicCommand implements Command {

    @Override
    public String getCommandName() {
	return "AfficherFluxPublicCommand";
    }

    @Override
    public ActionFlow actionPerform(HttpServletRequest request) {
	String vue = "afficherFluxPublic";
	String erreur = "erreur";

	System.out.println(this.getCommandName());
	
        // Redirection avant traitement si aucun formulaire n'a pas été soumis
	if ((request.getParameter("aboSubmit") == null) && (request.getParameter("desaboSubmit") == null)) {
	    return new ActionFlow(vue, vue + ".jsp", false);
	}
        
        ListeSuivis listeSuivis;
        ListeFlux listeFlux;
        try {
            // On récupère la liste de suivis du ServletContext
            listeSuivis = (ListeSuivis) request.getServletContext().getAttribute("listeSuivis");
            // On récupère la liste de flux du ServletContext
            listeFlux = (ListeFlux) request.getServletContext().getAttribute("listeFlux");
        } catch (Exception ex) {
            Logger.getLogger(PersoCommand.class.getName()).log(Level.SEVERE, null, ex);
            return new ActionFlow(erreur, erreur + ".html", true);
        }

        int id_flux;
        try {
            id_flux = Integer.parseInt(request.getParameter("id_flux"));
        } catch(NumberFormatException e) {
            id_flux = 0;
        }

        // Si le flux en paramètre est correct
        if (id_flux != 0) {
            FluxBean fb = listeFlux.getById(id_flux);
            int sessionID = (Integer) request.getSession().getAttribute("sessionID");
            
            // Si le formulaire d'abonnement est envoyé et que le flux est public, on abonne
            if ((request.getParameter("aboSubmit") != null) && (fb.getEstPublic() == 1)) {
                listeSuivis.addSuivi(new SuiviBean(0, sessionID, id_flux, 0));
            // Sinon, si le formulaire de desabonnement est envoyé, on desabonne
            } else if (request.getParameter("desaboSubmit") != null) {
                listeSuivis.removeSuivi(id_flux, sessionID);
            }
        }
        
	return new ActionFlow(vue, vue+ ".jsp", false);

    }
}
